package cn.ecut.utils;

import cn.ecut.pojo.User;
import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 * @Author ruanxin
 */
//网站3秒原则：用户体验
//多线程实现用户体验！ （异步处理）
public class SendEmail extends Thread{
    //用于给客户发送邮件的邮箱
    private String from ="rx0608@qq.com";
    //邮箱用户名
    private String username ="rx0608@qq.com";
    //邮箱密码
    private String password ="khaztadyafkiicei";
    //发送邮件的服务器地址
    private String host ="smtp.qq.com";

    private User user;
    public SendEmail(User user){
        this.user=user;
    }

    @Override
    public void run() {
        try{
            Properties prop = new Properties();
            prop.setProperty("mail.host", host);//设置qq邮箱服务器
            prop.setProperty("mail.transport.protocol", "smtp");//邮件发送协议
            prop.setProperty("mail.smtp.auth", "true");//需要验证用户名密码

            //关于QQ邮箱，还要设置SSL加密，加上以下代码即可，大厂，其他邮箱不需要！
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.socketFactory", sf);

            //使用JavaMail发送邮件的5个步骤

            //1、创建定义整个应用程序所需的环境信息的Session对象
            //QQ才有其他邮箱不用
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    //发送人邮件用户名和授权码
                    return new PasswordAuthentication(from, password);
                }
            });

            //开启Session的debug模式，就能看到Email的发送状态
            session.setDebug(true);
            //2、通过Session得到transport对象
            Transport ts = session.getTransport();

            //3、使用邮箱的用户名和授权码连上邮件服务器
            ts.connect(host, from, password);

            //4、创建邮件
            MimeMessage message = new MimeMessage(session);

            //指明邮件发件人
            message.setFrom(new InternetAddress(from));

            //指明邮件收件人
            message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress(user.getEmail())});

            //邮件标题
            message.setSubject("用户注册邮件");

            String info="恭喜您注册成功,您的用户名："+user.getUsername()+"   密码为："+user.getUserpassword()+"请妥善保管";

            message.setContent(info,"text/html;charset=UTF-8");
            message.saveChanges();
            //=======================================================


            //5、发送邮件
            ts.sendMessage(message, message.getAllRecipients());

            //6、关闭连接
            ts.close();
        }catch (Exception e){
            System.out.println(e);
        }

    }
}
